package com.pe.regope.integracion.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.pe.regope.integracion.dao.UsuarioDAO;
import com.pe.regope.negocio.dto.UsuarioDTO;

@Repository
public class UsuarioDAOImpl extends SqlMapClientDaoSupport implements UsuarioDAO{

	@Autowired
	public UsuarioDAOImpl(SqlMapClient sqlMapClient){
		super.setSqlMapClient(sqlMapClient);
	}
	
	@Override
	public UsuarioDTO validarUsuarioInicioSesion(String nombreUsuario, String contraseniaUsuario, Integer perfilSeleccionadoUsuario){
		Map  <String,Object> map=new HashMap  <String,Object>();
		map.put("nombreUsuario", nombreUsuario);
		map.put("contraseniaUsuario", contraseniaUsuario);
		map.put("perfilSeleccionadoUsuario", perfilSeleccionadoUsuario);
		UsuarioDTO usuario = (UsuarioDTO)getSqlMapClientTemplate().queryForObject("Usuario.validarUsuarioInicioSesion", map);
		return usuario;
	}
	
	@Override
	public String validarExistenciaUsuario(String nombreUsuario) throws DataAccessException{	
		return (String)getSqlMapClientTemplate().queryForObject("Usuario.validarExistenciaUsuario",nombreUsuario);
	}
	
	@Override
	public Integer obtenerIdUsuario(String nombreUsuario) throws DataAccessException{
		return (Integer)getSqlMapClientTemplate().queryForObject("Usuario.obtenerIdUsuario",nombreUsuario);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<UsuarioDTO> obtenerUsuariosTodos(){
		return getSqlMapClientTemplate().queryForList("Usuario.obtenerUsuariosTodos");
	}
		
	@Override
	public void insertarNuevoUsuario(String nombreUsuario,String contraseniaUsuario)throws DataAccessException{
		Map<String,String> map=new HashMap<String,String>();
		map.put("nombreUsuario",nombreUsuario);
		map.put("contraseniaUsuario",contraseniaUsuario);
		getSqlMapClientTemplate().insert("Usuario.insertarNuevoUsuario", map);
	}
	
	
	public void actualizarEstadoUsuario(Integer idUsuario, Boolean estadoUsuario) {
		Map <String,Object> map=new HashMap <String,Object>();
		map.put("idUsuario",idUsuario);
		map.put("estadoUsuario", estadoUsuario);
		getSqlMapClientTemplate().insert("Usuario.actualizarEstadoUsuario", map);
	}
	
	@Override
	public void actualizarContraseniaUsuario(Integer idUsuario,String  contraseniaUsuario) {
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("idUsuario",idUsuario);
		map.put("contraseniaUsuario", contraseniaUsuario);
		getSqlMapClientTemplate().insert("Usuario.actualizarContraseniaUsuario", map);
	}
}
